package com.example.yyh.recorddemo.base;

import android.content.Context;
import android.view.LayoutInflater;
import android.widget.BaseAdapter;

import java.util.List;

public abstract class AbstractAdapter<T> extends BaseAdapter {

    protected List<T> dataSetReference;
    protected LayoutInflater mInflater;
    protected Context mContext;


    public AbstractAdapter(Context context) {
        this.mContext = context;
        mInflater = LayoutInflater.from(mContext);
    }

    public List<T> getDatas() {
        return dataSetReference;
    }

    /**
     * 清空Adapter的数据集
     */
    public void clear() {
        if (dataSetReference != null) {
            dataSetReference.clear();
            notifyDataSetChanged();
        }
    }

    /**
     * 添加数据集，向数据缓存中添加多个元素。
     *
     * @param set 元素集
     */
    public void add(List<T> set) {
        if (dataSetReference == null && set != null) {
            update(set);
        } else {
            for (int i = 0; i < set.size(); i++) {
                T t = set.get(i);
                if (!dataSetReference.contains(t)) {
                    dataSetReference.add(t);
                }
            }
        }

    }

    /**
     * 添加数据，向数据缓存中添加多个元素。
     *
     * @param
     */
    public void add(T t) {
        if (null == dataSetReference) {
            throw new NullPointerException(
                    "DataSet is NULL, makeCall 'update' first !");
        }
        dataSetReference.add(t);
        notifyDataSetChanged();
    }


    /**
     * 删除数据集中指定位置的数据。
     *
     * @param position 要删除的数据在数据集中的位置
     */
    public void remove(int position) {
        if (dataSetReference == null)
            return;
        dataSetReference.remove(position);
        notifyDataSetChanged();
    }

    public void update(List<T> list) {
        dataSetReference = list;
        notifyDataSetChanged();
    }

    @Override
    public int getCount() {
        return null == dataSetReference ? 0 : dataSetReference.size();
    }

    @Override
    public T getItem(int position) {
        return null == dataSetReference ? null : dataSetReference.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }
}
